var store_panel;
var store_egresos;

Ext.onReady(function()
{

   store_egresos = new X.store.Json({
        url : '/solicitudpg/ajax-egresos',
        fields : [
            'codigoComprobante',
            'numeroComprobante',
            'codigoMovimiento',
            'fechaMovimiento',
            'cantidad',
            'concepto',
            'monto',
            'observaciones',
            'codigo',
            'nombreRubro',
            'razonSocial',
            'codigoNombre'
        ],
        autoLoad:false  
    });

    store_egresos.addListener('load', function(store, records, options){
    for(var i=0; i<store.getCount(); i++){
           var record = store.getAt(i);
           record.set('codigoNombre', record.get('codigo') + ' ' + record.get('nombreRubro'));
       }
    });

    store_panel = new X.store.Json({
        fields : [
            'codigoComprobante',
            'numeroComprobante',
            'codigoMovimiento',
            'fechaMovimiento',
            'cantidad',
            'concepto',
            'monto',
            'observaciones',
            'codigo',
            'nombreRubro',
            'razonSocial',
            'codigoNombre'
        ]
    });

    var grid = new X.grid.GridPanel({

        id        : 'grid',
        height    : 270,
        width     : 982,
        store     : store_panel,
        useBbar   : false,
        tbar      : [{
            id:'botonAsignar',
            text: 'Asignar egresos',
            icon:'/img/icon_agregar.png',
            handler : function(){
                if (store_panel.getCount()!=0) asignar_egresos();
                egresos.setVisible(true);
                win.show()
            }
        }],
        columns:[
            new X.column.Hidden({id:'MovimientoP' ,        dataIndex: 'codigoMovimiento'}),
            new X.column.Date  ({header: 'Fecha',          dataIndex: 'fechaMovimiento',   width: 85}),
            new X.column.Number({header: 'N° comprobante', dataIndex: 'numeroComprobante', width: 70}),
            new X.column.Text  ({header: 'Rubro',          dataIndex: 'codigoNombre',      width: 250}),
            new X.column.Text  ({header: 'Proveedor',      dataIndex: 'razonSocial',       width: 110}),
            new X.column.Text  ({header: 'Concepto',       dataIndex: 'concepto',          width: 140}),
            new X.column.Text  ({header: 'Observaciones',  dataIndex: 'observaciones',     width: 140}),
            new X.column.Number({header: 'Cant.',          dataIndex: 'cantidad',          width: 60}),
            new X.column.Money ({header: 'Monto',          dataIndex: 'monto',             width: 100})
        ]
    });

    grid.getStore().remoteSort=false;

    var form = new X.form.FormPanel({

        title            : 'Crear Orden de Pago',
        submitButtonText : 'Crear',
        returnButtonText : 'Cancelar',
        submitUrl        : '/solicitudpg/ajax-crear',
        returnUrl        : '/solicitudpg/listar',
        width            : 1050,
        height           : 530,
        labelWidth       : 120,
        layout           : 'absolute',

        items:[
            new Ext.form.FieldSet({title:'Solicitud', x: 10, y: 5, width: 400, height: 130, items:
            [
                new X.field.Hidden({id:'gridRows'}),
                new X.field.Date  ({fieldLabel:'Fecha', id:'fechaSolicitud', width:230, value: new Date(),
                listeners:{
                        change:function(field, newv, oldv){
                            if (Ext.isEmpty(Ext.getCmp('fechaSolicitud').getValue())){
                                Ext.getCmp('fechaSolicitud').setValue(oldv);
                            }
                            if (!Ext.getCmp('fechaSolicitud').isValid()){
                                Ext.getCmp('fechaSolicitud').setValue(oldv);
                            }
                            if (newv.getFullYear() == oldv.getFullYear()) return;
                            store_egresos.setBaseParam('fechaSolicitud',Ext.getCmp('fechaSolicitud').getValue());
                            store_egresos.reload();
                            store_panel.removeAll();
                        },
                        focus : function(){ form.disableSubmit = true;  },
                        blur  : function(){ form.disableSubmit = false; }
                   }
                }),
                new X.field.Text  ({fieldLabel:'A orden de', id:'ordenPago',      width:230, allowBlank: true}),
                new X.field.Number({fieldLabel:'Monto Total',   id:'monto',          width:230, readOnly: true, vtype: 'total'}),
            ]}),
            new Ext.form.FieldSet({title:'Detalles', x: 545, y: 5, width: 470, height: 130, items:
            [
                new X.field.Area({fieldLabel:'Concepto',      id:'concepto',      width:300, height: 40, allowBlank: true,
                listeners: {
                    focus : function(){ form.disableSubmit = true;  },
                    blur  : function(){ form.disableSubmit = false; }
                }}),
                new X.field.Area({fieldLabel:'Justificación', id:'justificacion', width:300, height: 40, allowBlank: true,
                listeners: {
                    focus : function(){ form.disableSubmit = true;  },
                    blur  : function(){ form.disableSubmit = false; }
                }})
            ]}),
            new Ext.form.FieldSet({title:'Detalle de Egresos', x: 10, y: 150,items:
            [
                grid
            ]})
        ]
    });

    var sm = new Ext.grid.CheckboxSelectionModel();
    
    var egresos = new X.grid.GridPanel({

        id       : 'egresos',
        title    : 'Lista de Egresos de Monto Mayor',
        height   : 500,
        width    : 1100,
        store    : store_egresos,
        useBbar  : false,

        columns:[
            new X.column.Hidden({id:'MovimientoE',         dataIndex: 'codigoMovimiento'}),
            new X.column.Date  ({header: 'Fecha',          dataIndex: 'fechaMovimiento',   width: 85}),
            new X.column.Number({header: 'N° comprobante', dataIndex: 'numeroComprobante', width: 70}),
            new X.column.Text  ({header: 'Rubro',          dataIndex: 'codigoNombre',      width: 370}),
            new X.column.Text  ({header: 'Proveedor',      dataIndex: 'razonSocial',       width: 110}),
            new X.column.Text  ({header: 'Concepto',       dataIndex: 'concepto',          width: 140}),
            new X.column.Text  ({header: 'Observaciones',  dataIndex: 'observaciones',     width: 140}),
            new X.column.Number({header: 'Cant.',          dataIndex: 'cantidad',          width: 60}),
            new X.column.Money ({header: 'Monto',          dataIndex: 'monto',             width: 100}),
            sm
        ],
        sm :sm,
        buttons: [ {text:'Aceptar', handler:Aceptar, ref: '../AceptarButton'},
                   {text:'Cancelar', handler:Cancelar}
                 ],
        buttonAlign:'center'

    });

    egresos.getStore().remoteSort=false;
    egresos.setVisible(false);
    
    var win = new Ext.Window({
        resizable: false,
        closeAction: 'hide',
        items: [egresos]
    });

    function Aceptar(){
        var array= new Array();
        array = sm.getSelections();
        store_panel.removeAll();
        sum=0;
        for (var i=0;i<array.length;i++)
        {
             store_panel.add(array[i]);
             sum += parseInt( array[i].get('monto')  );
        }
        Ext.getCmp('monto').setValue(sum);
        win.hide();

    }

     function Cancelar(){
        win.hide();
    }

    function asignar_egresos(){
         var array= new Array();
         for (var i=0,k=0;i<store_panel.getCount();i++){
            rec = store_panel.getAt(i);
            cod = rec.get('codigoMovimiento');
            for (var j=0;j<store_egresos.getCount();j++){
                 rec = store_egresos.getAt(j);
                 if (cod == rec.get('codigoMovimiento')){
                     array[k]=j; k++;
                 }
            }
        }
        sm.selectRows(array);
    }

     Ext.apply(Ext.form.VTypes, {
         totalText : 'al menos un egreso',
         total     : function(val, field) {
            return store_panel.getCount() > 0;
         }
     });

      form.getForm().addListener('beforeaction', function(form, action){
        if (Ext.isEmpty(Ext.getCmp('fechaSolicitud').getValue())){
            X.msg.Failure('Complete con una "Fecha"'); return false;
        }
        if (Ext.isEmpty(Ext.getCmp('ordenPago').getValue())){
            X.msg.Failure('Complete el campo "Orden de pago"'); return false;
        }
        if (Ext.isEmpty(Ext.getCmp('concepto').getValue())){
            X.msg.Failure('Complete el campo "Concepto"'); return false;
        }
        if (Ext.isEmpty(Ext.getCmp('justificacion').getValue())){
            X.msg.Failure('Complete el campo "Justificacion"'); return false;
        }
        if (store_panel.getCount() <= 0){
            X.msg.Failure('Agregue al menos un movimiento'); return false;
        }
        return true;
    });
});
